var totalTree;
var collapsed = 0;
var expanded = 1;
var ulIdregExp = new RegExp("^u");
var lang;

$(document).ready(function() {
	lang = $("#display-lang").val();
	loadData();
//	var btn = $("<input type='button' id='btnSub' value='获取选择值 ' />");
//	$("#treeDiv").append(btn);
//	$(btn).click(function(){
//		alert($("#treeDiv .jstree-checked").length);
//		$("#treeDiv .jstree-checked").each(function(){
//			var node = $(this);
//			alert($(node).attr("id"));
//		});
//	});
	
//	var t2 = $("<div id='jstree'></div>");
//	$("#treeDiv").append(t2);
//	$("#jstree").jstree({
//        "checkbox": {
//           real_checkboxes: true,
//           real_checkboxes_names: function (n) {
//              var nid = 0;
//              $(n).each(function (data) {
//                 nid = $(this).attr("nodeid");
//              });
//              return (["check_" + nid, nid]);
//           },
//           two_state: true
//        },
//        "plugins": ["themes", "json_data", "ui", "checkbox"]
//     })
//     .bind('open_node.jstree', function (e, data) {
//        $('#jstree').jstree('check_node', 'li[selected=selected]');
//     })
	/*treeContent = $.ajax({
		url : "/sview/classTree",// "test.xml",//
		dataType : 'xml',
		type : "post",
		data : {
			state : "0",
			ds_type : $("#ds_type").val(),
			ds_id : $("#ds_id").val()
		},
		success : function(data) {
			totalTree = data;
			// alert($(data).find("named_entities").length+"abc:"+$(data).find("others").length);
			if ($(data).find("named_entities").length > 0) {
				showTopTypes(data);
			}
			if ($(data).find("others").length > 0) {
				addOthers(data);
			}
		}
	});*/
});
function loadData(){
	$("#treeDiv").addClass("loading2");
	$.ajax({
		url : "/sview/classTree",// "test.xml",//
		dataType : 'json',
		type : "post",
//		contentType: "charset='utf-8'",
		data : {
			ds_type : $("#ds_type").val(),
			ds_id : $("#ds_id").val()+"",
			lang : $("#display-lang").val(),
			idStr : $("#idStr").val()
		},
		async : true,
		success : function(result) {
//			var tree = result["tree"];
			$("#treeDiv").removeClass("loading2");
			var tree = eval("("+decodeURIComponent(result["tree"])+")");
			var temp = $("<div class='tree'></div>");
			$("#treeDiv").append($(temp));
//			closeLoading();
			var topName = "All";
			if(lang=="zh"){
				topName = "全部";
			}
			$(temp).jstree({
				"json_data":{
					"data" : [{"data":topName,
							"state":"open",
							"attr":{"id":"-2"},
							"children": tree}]
				},
//				"checkbox": {
//		            "real_checkboxes": true,
////		            "real_checkboxes_names": function (n) {
////		               // return [("check_" + (n[0].id || Math.ceil(Math.random() * 10000))), n[0].id]
////		            }
//		        },
				"themes":{"theme":"classic","dots":true,"icons":false},
				"plugins" : ["themes", "json_data", "checkbox", "ui" ]//"sort"
//			})
				//alert(data.args[0].attr("id"));
				//alert(data.rslt.cp);
//			}).bind('open_node.jstree', function (e, data) {
//		           $(temp).jstree('check_node', 'li[selected=selected]');
	        });
			$(temp).bind("loaded.jstree",function(event,data){
				$(temp).jstree("check_node","#-2");//将id为-2的节点对应的checkbox设置为勾选状态
			});
			$(temp).bind("select_node.jstree",function(e,data){
				var li = data.rslt.obj;
				if($(li).hasClass("jstree-checked")){
					var id = $(li).attr("id");
					if(id.charAt(0)=="u"||id.charAt(0)=="b"){
						var aim = $("#entitiesDiv "+"#"+id);
						$("#entitiesDiv").animate({scrollTop:0}, 0);
						$("#entitiesDiv").animate({scrollTop: $(aim).position().top}, 1000);
//						fade($(aim),'#369DFF','#fff',20,1);
//						fade($(aim),'#fff','#369DFF',20,1);
					}
				}
			})
			$(temp).bind("check_node.jstree",function(e,data){
				var id = data.rslt.obj.attr("id");
				onCheckClass(data.rslt.obj);
//				var id = $.jstree.get_checked().attr('id');//$.jstree._focused().get_checked().attr('id');
			});
			$(temp).bind("uncheck_node.jstree",function(e,data){
				var id = data.rslt.obj.attr("id");
				onUncheckClass(data.rslt.obj);
			});
			showAllEntities();
//			$(temp).jstree("check_node","#-2");
//			$.jstree._reference($(temp)).get_selected().each(
//					function(index,element){alert($(element).attr("id"));
//					});
//			$(temp).bind("change_state.jstree",function(e,d)){
//				var tagName = d.args[0].tagName;
//				var refreshing = d.inst.data.core.refreshing;
//				if((tagName == "A" || tagName == "INS") && (refreshing != true && refreshing != "undefined")){
//					alert(tagName);
//				}
//			}
		}

	});
}
function showAllEntities(){
	$("#entitiesDiv").addClass("loading2");
//	onLoading();
	$.ajax({
		url : "/sview/entitiesView",// "test.xml",//
		dataType : 'html',
		type : "post",
		data : {
			ds_type : $("#ds_type").val(),
			ds_id : $("#ds_id").val(),
			idStr : $("#idStr").val(),
			class_id : "-2",
			lang: $("#display-lang").val()
		},
		async : true,
		success : function(data) {
//			closeLoading();
			$("#entitiesDiv").html(data);
			$("#entitiesDiv").removeClass("loading2");
			$('#entitiesDiv').animate({
				scrollTop : 0
			}, 0);
		}
	});
}

function onCheckClass(li){
	$("#entitiesDiv").addClass("loading2");
	var id = $(li).attr("id");
	if(id.length>0 && (id.charAt(0) == "u" || id.charAt(0) == "b")){//if is entity id
		var aim = $("#entitiesDiv "+"#"+id);
		$(aim).show();
//		var top = $(aim).position().top;
//		$("#entitiesDiv").scrollTop(top);
		$("#entitiesDiv").animate({scrollTop:0}, 0);
		$("#entitiesDiv").animate({scrollTop: $(aim).position().top}, 1000);
		fade($(aim),'#369DFF','#fff',20,1);
		fade($(aim),'#fff','#369DFF',20,1);
		if(id.length>0 && id.charAt(0) != "b"){
//			$("#toCollection").show();
			$("#toCollection").linkbutton('enable');
		}
	}else{// is class id
		$.ajax({
				url : "/sview/entitiesView",// "test.xml",//
				dataType : 'json',
				type : "post",
				data : {
					ds_type : $("#ds_type").val(),
					ds_id : $("#ds_id").val(),
					idStr : $("#idStr").val(),
					class_id : id,
					intent: "getEntityIds"
				},
				async : true,
				success : function(data) {
					$("#entitiesDiv").removeClass("loading2");
					var array = data["array"];
					for(var i=0; i<$(array).length; i++){
//						var blockId = "#entitiesDiv "+"#"+array[i];
//						$(blockId).show();
						var aim = $("#entitiesDiv "+"#"+array[i]);
						$(aim).show();
						if(i==0){
							$("#entitiesDiv").animate({scrollTop:0}, 0);
							$("#entitiesDiv").animate({scrollTop: $(aim).position().top}, 1000);
						}
						if(id != -2){
//							var top = $(aim).position().top;
//							$("#entitiesDiv").scrollTop(top);
							fade($(aim),'#369DFF','#fff',20,1);
							fade($(aim),'#fff','#369DFF',20,1);
						}
					}
					if(id.length>0 && id.charAt(0) != "b"){
//						$("#toCollection").show();
						$("#toCollection").linkbutton('enable');
					}
			}
		});
	}
}
function onUncheckClass(li){
	$("#entitiesDiv").addClass("loading2");
	var id = $(li).attr("id");
	if(id.length>0 && (id.charAt(0) == "u" || id.charAt(0) == "b")){//if is entity id
		$("#entitiesDiv "+"#"+id).hide();
		if($("#0 .jstree-checked").length==0){
//			$("#toCollection").hide();
			$("#toCollection").linkbutton('disable');
		}
	}else{// is class id
		$.ajax({
				url : "/sview/entitiesView",// "test.xml",//
				dataType : 'json',
				type : "post",
				data : {
					ds_type : $("#ds_type").val(),
					ds_id : $("#ds_id").val(),
					idStr : $("#idStr").val(),
					class_id : id,
					intent: "getEntityIds"
				},
				async : true,
				success : function(result) {
					$("#entitiesDiv").removeClass("loading2");
					var array = result["array"];
					for(var i=0; i<array.length; i++){
						var blockId = "#entitiesDiv "+"#"+array[i];
						$(blockId).hide();
					}
					if($("#0 .jstree-checked").length==0){
//						$("#toCollection").hide();
						$("#toCollection").linkbutton('disable');
					}
			}
		});
	}
}

//分离RGB颜色 0:R | 1:G | 2:B
function parseRGB(color, type)
{
 var start, len, result;
 len = (color.length == 4)?1:2;
 start = type * len + 1;
 result = color.substr(start, len);
 if(result.length == 1) result += result;
 return parseInt(result, 16);
}
//页面元素ID，源色彩，渐变色彩，淡入淡出步数，是否背景颜色（默认文字颜色）
function fade(item, colorSource, colorFade, fadeStep, background)
{
//    var element = document.getElementById(id);
	var element = $(item)[0];

    // 分解源色彩
    var rSource = parseRGB(colorSource, 0); //红 R
    var bSource = parseRGB(colorSource, 1); //绿 G
    var gSource = parseRGB(colorSource, 2); //蓝 B

    // 分解渐变色彩
    var rFade = parseRGB(colorFade, 0);
    var bFade = parseRGB(colorFade, 1);
    var gFade = parseRGB(colorFade, 2);

    // 步数统计
    var step = 0;

    // 设置定时器
    var fadeTimer = setInterval(
        function(){
            var tmpStep = fadeStep - step;
            // 由于 floor() 计算不准确，当达到指定步数后直接赋值源色彩
            if(step < fadeStep)
            {
                with(Math)
                {
                    var rStep = floor((rSource - rFade) / tmpStep);
                    var bStep = floor((bSource - bFade) / tmpStep);
                    var gStep = floor((gSource - gFade) / tmpStep);
                }
                rFade += rStep;
                bFade += bStep;
                gFade += bStep;
                if(background)
                {
                    element.style.backgroundColor = 'rgb('+rFade+','+bFade+','+gFade+')';
                }
                else
                {
                    element.style.color = 'rgb('+rFade+','+bFade+','+gFade+')';
                }
            }
            else
            {
                if(background)
                {
                    element.style.backgroundColor = colorSource;
                }
                else
                {
                    element.style.color = colorSource;
                }

                // 清除定时器
                clearInterval(fadeTimer);
            }
            step ++;
        },
        50
    );
}
